<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    let obj = [{ name: 'zs' }, { age: 28 }]

    function copy(obj) {
      //首先判断需要拷贝的“东西”是什么类型
      if (typeof obj !== 'object' || obj == null) {
        // 如果不是对象或者为null则返回
        return;
      }
      //判断是数组/对象，并开启对应堆内存
      let newobj = Array.isArray(obj) ? [] : {};
      //obj是数组类型，下面的i就是index；obj是对象，i就是key
      for (let i in obj) {
        /* hasOwnProperty(name)指示一个对象自身（不包括原型链）
        是否具有指定名称的属性。如果有返回true，如果没有返回false。 */
        if (obj.hasOwnProperty(i)) {
          //拿到属性值判断是否为引用数据类型，是则递归
          newobj[i] = typeof obj[i] === 'object' ? copy(obj[i]) : obj[i];
        }
      }
      return newobj
    }

    console.log(copy(obj));

    /* for…in循环可应用于对象的复制，
    不过其有一个缺点，就是会从原型属性里继承prototype()属性。 */
    let array = [1, 2, 3, 4, 5]
    Array.prototype.age = 13
    console.log(array);
    var result = []
    for (let i in array) {
      result.push(array[i]);
      // console.log(array[i]);
      console.log(i);
    }
    console.log(result.join(','));

    // result返回结果【1, 2, 3, 4, 5, 13】
  </script>
</body>

</html>